drivers/serial: Refactor PL011 to be general-purpose#18837
Conversation
|
I am able to run the $ qemu-system-aarch64 -cpu cortex-a53 -nographic -machine virt,virtualization=on,gic-version=3 -net none -chardev stdio,id=con,mux=on -serial chardev:con -mon chardev=con,mode=readline -kernel ./nuttx
NuttShell (NSH) NuttX-12.13.0
nsh> ps
TID PID PPID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED COMMAND
0 0 0 0 FIFO Kthread - Ready 0000000000000000 0008144 0001616 19.8% Idle_Task
1 0 0 192 RR Kthread - Waiting Semaphore 0000000000000000 0008080 0001200 14.8% hpwork 0x404196a0 0x40419728
3 3 0 100 RR Task - Running 0000000000000000 0008112 0003728 45.9% nsh_main
nsh> ls
/:
dev/
proc/
tmp/
nsh>It's also odd that it works for SMP. |
|
@raiden00pl Do you have any idea why this change might cause NTFC to fail with a boot timeout on |
|
no idea. NTFC should export nuttx.elf in CI artifacts, but for some reason these are not present for qemu-armv8a:citest and qemu-armv8a:citest_smp. What's funny - it works for all other targets citest targets. Now I see that this target uses cmake, so that might be the reason for the missing elf in the artifacts. |
| * | ||
| ***************************************************************************/ | ||
|
|
||
| void pl011_serialinit(void) |
There was a problem hiding this comment.
why drop the default implementation which could avoid the code duplication in the common case. it's better that:
- keep pl011_serialinit/pl011_earlyserialinit if one of CONFIG_UARTx_PL011 is enabled
- add pl011_dev_init, so the special case could call the new function directly.
There was a problem hiding this comment.
Because this function is no longer useful. It needs access to the device structs for the PL011 interfaces in order to register them, but these are defined outside this module now.
If we keep this function, then we can no longer:
- Define an arbitrary number of interfaces
- Use the standard UART config options for configuring PL011 UART
It should now be up to the chip logic to register the UART interfaces instead, as with all other UART drivers. Otherwise we don't have the benefits and we must also maintain two separate ways of doing things. There are only 3 boards that use PL011 right now, so it's not a super common case.
There was a problem hiding this comment.
but the similar config duplicated in the many places now. I would prefer to keep the origin global definition, so the common usage could be simplified.
There was a problem hiding this comment.
I'm not sure there's a way around that except by maintaining two interfaces for PL011 registration and all the old Kconfig options. Plus, I will have to add some refactoring for more granular interrupt management.
Let me brainstorm and get back to you, maybe I can keep the init function and still remove the PL011-specific Kconfig functions. The main challenge is selection of the base addresses and IRQ numbers.
I'll try building with CMake in case that reveals what the issue might be. |
This commit refactors the PL011 UART driver so that it can be re-used for any number of UART interfaces depending on the board/chip. This commit also hooks the UART interface configuration/selection for PL011 UART interfaces into the same Kconfig used for regular UART interfaces. Now UART interfaces are configured in a standard, extensible way. Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
|
Okay so I built $ cmake -B build -DBOARD_CONFIG=qemu-armv8a:citest -GNinja
$ cmake --build buildThen I downloaded the $ ntfc test --testpath=/home/linguini/coding/nuttx-space/nuttx-ntfc/external/nuttx-testing/ --confpath=/home/linguini/coding/nuttx-space/nuttx/boards/arm64/qemu/qemu-armv8a/configs/citest/config.yaml --jsonconf=/home/linguini/coding/nuttx-space/nuttx/boards/arm64/qemu/qemu-armv8a/configs/citest/session.json
--------------------------------------------------------------------------------
NTFC PID: 3606981
--------------------------------------------------------------------------------
YAML config:
{'config': {'cwd': './', 'kv': [], 'loops': 1},
'product': {'cores': {'core0': {'conf_path': './build/.config',
'device': 'qemu',
'elf_path': './build/nuttx',
'exec_args': '-cpu cortex-a53 -nographic '
'-machine '
'virt,virtualization=on,gic-version=3 '
'-net none -chardev '
'stdio,id=con,mux=on -serial '
'chardev:con -mon '
'chardev=con,mode=readline',
'exec_path': 'qemu-system-aarch64',
'name': 'main'}},
'name': 'qemu-armv8a'}}
JSON config:
{'args': {'kv': []},
'module': {'exclude_module': ['Nuttx_System_Fs_Fs'],
'include_module': [],
'order': []}}
CPU information header not found in output
==================================================================== test session starts =====================================================================
platform linux -- Python 3.14.5, pytest-9.0.3, pluggy-1.6.0
rootdir: /home/linguini/coding/nuttx-space/nuttx-ntfc
configfile: tox.ini
plugins: html-4.2.0, repeat-0.9.4, ordering-0.6, dependency-0.6.1, metadata-3.1.1, timeout-2.4.0
collected 932 items
=================================================================== no tests ran in 0.38s ====================================================================
====================================================================================================
🚀 RUNNING 63 SELECTED TEST(S)
====================================================================================================
┼─────┼──────────────────────────────────┼──────────────────────────────┼
│ Idx │ Module │ Test Case │
┼─────┼──────────────────────────────────┼──────────────────────────────┼
│ 1 │ Nuttx_System_Arch_Os_Integration │ test_os[main] │
│ 2 │ Nuttx_System_Arch_Example │ test_hello_integration[main] │
│ 3 │ Nuttx_System_Arch_Example │ test_getprime │
│ 4 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat001[main] │
│ 5 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat002[main] │
│ 6 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat003[main] │
│ 7 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat004[main] │
│ 8 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat005[main] │
│ 9 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat006[main] │
│ 10 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat007[main] │
│ 11 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat008[main] │
│ 12 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat009[main] │
│ 13 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat010[main] │
│ 14 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd001 │
│ 15 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd002 │
│ 16 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd003 │
│ 17 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd004 │
│ 18 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd005 │
│ 19 │ Nuttx_System_Arch_Nsh │ TestEcho.test_echo001 │
│ 20 │ Nuttx_System_Arch_Nsh │ TestEcho.test_echo002 │
│ 21 │ Nuttx_System_Arch_Nsh │ TestEcho.test_echo003 │
│ 22 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help01 │
│ 23 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help02 │
│ 24 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help_v │
│ 25 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help_cat │
│ 26 │ Nuttx_System_Arch_Nsh │ TestLs.test_ls_l │
│ 27 │ Nuttx_System_Arch_Nsh │ TestLs.test_ls_s │
│ 28 │ Nuttx_System_Arch_Nsh │ TestLs.test_ls_R │
│ 29 │ Nuttx_System_Arch_Nsh │ TestRm.test_rm001 │
│ 30 │ Nuttx_System_Arch_Nsh │ TestRm.test_rm002 │
│ 31 │ Nuttx_System_Arch_Nsh │ TestMkdir.test_mkdir001 │
│ 32 │ Nuttx_System_Arch_Nsh │ TestRmdir.test_rmdir001 │
│ 33 │ Nuttx_System_Arch_Nsh │ TestRmdir.test_rmdir002 │
│ 34 │ Nuttx_System_Arch_Nsh │ TestCp.test_cp001 │
│ 35 │ Nuttx_System_Arch_Nsh │ TestCp.test_cp002 │
│ 36 │ Nuttx_System_Arch_Nsh │ TestCp.test_cp003 │
│ 37 │ Nuttx_System_Arch_Nsh │ TestPs.test_ps │
│ 38 │ Nuttx_System_Arch_Nsh │ TestTime.test_sleep │
│ 39 │ Nuttx_System_Arch_Nsh │ TestTime.test_usleep │
│ 40 │ Nuttx_System_Arch_Nsh │ TestSet.test_set │
│ 41 │ Nuttx_System_Arch_Nsh │ TestSet.test_unset │
│ 42 │ Nuttx_System_Arch_Nsh │ TestTest.test_test │
│ 43 │ Nuttx_System_Arch_Nsh │ TestDirname.test_dirname │
│ 44 │ Nuttx_System_Arch_Nsh │ TestBasename.test_basename │
│ 45 │ Nuttx_System_Arch_Nsh │ TestDf.test_df │
│ 46 │ Nuttx_System_Arch_Nsh │ TestDf.test_df_h │
│ 47 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname │
│ 48 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_a │
│ 49 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_s │
│ 50 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_r │
│ 51 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_v │
│ 52 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_m │
│ 53 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_i │
│ 54 │ Nuttx_System_Arch_Nsh │ TestEnv.test_env │
│ 55 │ Nuttx_System_Arch_Nsh │ TestMv.test_mv │
│ 56 │ Nuttx_System_Arch_Nsh │ TestPwd.test_pwd │
│ 57 │ Nuttx_System_Arch_Nsh │ TestHexdump.test_hexdump │
│ 58 │ Nuttx_System_Arch_Nsh │ TestMkrd.test_mkrd │
│ 59 │ Nuttx_System_Arch_Nsh │ TestMw.test_mw │
│ 60 │ Nuttx_System_Arch_Nsh │ TestExec.test_exec │
│ 61 │ Nuttx_System_Arch_Space │ test_free[main] │
│ 62 │ Nuttx_System_Arch_Space │ test_df[main] │
│ 63 │ Nuttx_System_Tools │ test_system_mmleak │
┼─────┼──────────────────────────────────┼──────────────────────────────┼
====================================================================================================
CPU information header not found in output
==================================================================== test session starts =====================================================================
platform linux -- Python 3.14.5, pytest-9.0.3, pluggy-1.6.0
rootdir: /home/linguini/coding/nuttx-space/nuttx-ntfc
configfile: tox.ini
plugins: html-4.2.0, repeat-0.9.4, ordering-0.6, dependency-0.6.1, metadata-3.1.1, timeout-2.4.0
timeout: 800.0s
timeout method: signal
timeout func_only: False
session timeout: 3600.0s
collected 64 items
../nuttx-ntfc/external/nuttx-testing/arch/os/integration/test_arch_os_integration.py::test_os[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/example/test_arch_example_integration.py::test_hello_integration[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/example/test_arch_example_integration.py::test_getprime PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat001[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat002[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat003[main] It works fine. I even made sure to use I'm genuinely at a loss for what's going on. Can you spot anything @raiden00pl? |
|
Did you run this on your host or from nuttx-ci docker? I also checked it on my host, and this change pass ntfc tests. So I think there might be something wrong with image produced by docker itself, or maybe qemu version that is installed on this image |
This was run on my host, not from the |
|
Okay it looks the CI uses QEMU version 6.2.0, while I have 11.0.0 (for |
|
Even more hair pulling. I downloaded the latest CI docker image and ran it $ docker pull ghcr.io/apache/nuttx/apache-nuttx-ci-linux:latestThen I cloned my branch with these changes, nuttx-apps, nuttx-ntfc, nuttx-ntfc-testing, installed NTFC, built $ ntfc test --testpath=../nuttx-ntfc/external/nuttx-testing/ --confpath=boards/arm64/qemu/qemu-armv8a/configs/citest/config.yaml --jsonconf=boards/arm64/qemu/qemu-armv8a/configs/citest/session.json
--------------------------------------------------------------------------------
NTFC PID: 11313
--------------------------------------------------------------------------------
YAML config:
{'config': {'cwd': './', 'kv': [], 'loops': 1},
'product': {'cores': {'core0': {'conf_path': './build/.config',
'device': 'qemu',
'elf_path': './build/nuttx',
'exec_args': '-cpu cortex-a53 -nographic '
'-machine '
'virt,virtualization=on,gic-version=3 '
'-net none -chardev '
'stdio,id=con,mux=on -serial '
'chardev:con -mon '
'chardev=con,mode=readline',
'exec_path': 'qemu-system-aarch64',
'name': 'main'}},
'name': 'qemu-armv8a'}}
JSON config:
{'args': {'kv': []},
'module': {'exclude_module': ['Nuttx_System_Fs_Fs'],
'include_module': [],
'order': []}}
CPU information header not found in output
================================================================== test session starts ===================================================================
platform linux -- Python 3.10.12, pytest-9.0.3, pluggy-1.6.0
rootdir: /tools/nuttx-space/nuttx-ntfc
configfile: tox.ini
plugins: html-4.2.0, dependency-0.6.1, metadata-3.1.1, timeout-2.4.0, repeat-0.9.1, ordering-0.6, json-0.4.0
collected 932 items
================================================================= no tests ran in 0.41s ==================================================================
====================================================================================================
🚀 RUNNING 63 SELECTED TEST(S)
====================================================================================================
┼─────┼──────────────────────────────────┼──────────────────────────────┼
│ Idx │ Module │ Test Case │
┼─────┼──────────────────────────────────┼──────────────────────────────┼
│ 1 │ Nuttx_System_Arch_Os_Integration │ test_os[main] │
│ 2 │ Nuttx_System_Arch_Example │ test_hello_integration[main] │
│ 3 │ Nuttx_System_Arch_Example │ test_getprime │
│ 4 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat001[main] │
│ 5 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat002[main] │
│ 6 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat003[main] │
│ 7 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat004[main] │
│ 8 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat005[main] │
│ 9 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat006[main] │
│ 10 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat007[main] │
│ 11 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat008[main] │
│ 12 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat009[main] │
│ 13 │ Nuttx_System_Arch_Nsh │ TestCat.test_cat010[main] │
│ 14 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd001 │
│ 15 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd002 │
│ 16 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd003 │
│ 17 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd004 │
│ 18 │ Nuttx_System_Arch_Nsh │ TestCd.test_cd005 │
│ 19 │ Nuttx_System_Arch_Nsh │ TestEcho.test_echo001 │
│ 20 │ Nuttx_System_Arch_Nsh │ TestEcho.test_echo002 │
│ 21 │ Nuttx_System_Arch_Nsh │ TestEcho.test_echo003 │
│ 22 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help01 │
│ 23 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help02 │
│ 24 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help_v │
│ 25 │ Nuttx_System_Arch_Nsh │ TestHelp.test_help_cat │
│ 26 │ Nuttx_System_Arch_Nsh │ TestLs.test_ls_l │
│ 27 │ Nuttx_System_Arch_Nsh │ TestLs.test_ls_s │
│ 28 │ Nuttx_System_Arch_Nsh │ TestLs.test_ls_R │
│ 29 │ Nuttx_System_Arch_Nsh │ TestRm.test_rm001 │
│ 30 │ Nuttx_System_Arch_Nsh │ TestRm.test_rm002 │
│ 31 │ Nuttx_System_Arch_Nsh │ TestMkdir.test_mkdir001 │
│ 32 │ Nuttx_System_Arch_Nsh │ TestRmdir.test_rmdir001 │
│ 33 │ Nuttx_System_Arch_Nsh │ TestRmdir.test_rmdir002 │
│ 34 │ Nuttx_System_Arch_Nsh │ TestCp.test_cp001 │
│ 35 │ Nuttx_System_Arch_Nsh │ TestCp.test_cp002 │
│ 36 │ Nuttx_System_Arch_Nsh │ TestCp.test_cp003 │
│ 37 │ Nuttx_System_Arch_Nsh │ TestPs.test_ps │
│ 38 │ Nuttx_System_Arch_Nsh │ TestTime.test_sleep │
│ 39 │ Nuttx_System_Arch_Nsh │ TestTime.test_usleep │
│ 40 │ Nuttx_System_Arch_Nsh │ TestSet.test_set │
│ 41 │ Nuttx_System_Arch_Nsh │ TestSet.test_unset │
│ 42 │ Nuttx_System_Arch_Nsh │ TestTest.test_test │
│ 43 │ Nuttx_System_Arch_Nsh │ TestDirname.test_dirname │
│ 44 │ Nuttx_System_Arch_Nsh │ TestBasename.test_basename │
│ 45 │ Nuttx_System_Arch_Nsh │ TestDf.test_df │
│ 46 │ Nuttx_System_Arch_Nsh │ TestDf.test_df_h │
│ 47 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname │
│ 48 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_a │
│ 49 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_s │
│ 50 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_r │
│ 51 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_v │
│ 52 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_m │
│ 53 │ Nuttx_System_Arch_Nsh │ TestUname.test_uname_i │
│ 54 │ Nuttx_System_Arch_Nsh │ TestEnv.test_env │
│ 55 │ Nuttx_System_Arch_Nsh │ TestMv.test_mv │
│ 56 │ Nuttx_System_Arch_Nsh │ TestPwd.test_pwd │
│ 57 │ Nuttx_System_Arch_Nsh │ TestHexdump.test_hexdump │
│ 58 │ Nuttx_System_Arch_Nsh │ TestMkrd.test_mkrd │
│ 59 │ Nuttx_System_Arch_Nsh │ TestMw.test_mw │
│ 60 │ Nuttx_System_Arch_Nsh │ TestExec.test_exec │
│ 61 │ Nuttx_System_Arch_Space │ test_free[main] │
│ 62 │ Nuttx_System_Arch_Space │ test_df[main] │
│ 63 │ Nuttx_System_Tools │ test_system_mmleak │
┼─────┼──────────────────────────────────┼──────────────────────────────┼
====================================================================================================
CPU information header not found in output
================================================================== test session starts ===================================================================
platform linux -- Python 3.10.12, pytest-9.0.3, pluggy-1.6.0
rootdir: /tools/nuttx-space/nuttx-ntfc
configfile: tox.ini
plugins: html-4.2.0, dependency-0.6.1, metadata-3.1.1, timeout-2.4.0, repeat-0.9.1, ordering-0.6, json-0.4.0
timeout: 800.0s
timeout method: signal
timeout func_only: False
session timeout: 3600.0s
collected 64 items
../nuttx-ntfc/external/nuttx-testing/arch/os/integration/test_arch_os_integration.py::test_os[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/example/test_arch_example_integration.py::test_hello_integration[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/example/test_arch_example_integration.py::test_getprime PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat001[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat002[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat003[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat004[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat005[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat006[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat007[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat008[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat009[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat010[main] PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCd::test_cd001 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCd::test_cd002 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCd::test_cd003 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCd::test_cd004 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestCd::test_cd005 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestEcho::test_echo001 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestEcho::test_echo002 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestEcho::test_echo003 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestHelp::test_help01 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestHelp::test_help02 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestHelp::test_help_v PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestHelp::test_help_cat PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestLs::test_ls_l PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestLs::test_ls_s SKIPPED (No Ready)
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestLs::test_ls_R PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestRm::test_rm001 PASSED
../nuttx-ntfc/external/nuttx-testing/arch/nsh/test_arch_nsh_integration.py::TestRm::test_rm002 PASSED@simbit18 or @lupyuen , do you have any idea what might be going on here? Any advice for getting closer to reproducing the CI conditions locally? |
|
@linguini1 Following these Docker Steps: I'm hitting some errors with cibuild.sh at ## Based on https://lupyuen.org/articles/ci2#build-nuttx-for-one-target-group
## Tested on Ubuntu 24.04.2 LTS x86_64
$ sudo docker run \
-it \
ghcr.io/apache/nuttx/apache-nuttx-ci-linux:latest \
/bin/bash
$ pip install ntfc
$ mkdir $HOME/nuttx-ntfc
$ mkdir $HOME/nuttx-ntfc/external
$ cd $HOME/nuttx-ntfc/external
$ git clone -b release-0.0.1 https://github.com/apache/nuttx-ntfc-testing
$ mv nuttx-ntfc-testing nuttx-testing
$ export NTFCDIR=$HOME/nuttx-ntfc
$ cd
$ git clone https://github.com/linguini1/nuttx --branch pl011-uart
HEAD is now at 0fd76d2a1c drivers/serial: Refactor PL011 to be general-purpose
NuttX Source: https://github.com/apache/nuttx/tree/0fd76d2a1c9a6f281138b4df2ba8dda736e72575
$ git clone https://github.com/apache/nuttx-apps apps
HEAD is now at 939ed0ca2 apps/system/microros: add rcutils strcasecmp strings.h include patch.
NuttX Apps: https://github.com/apache/nuttx-apps/tree/939ed0ca2a7b593949973be5d09aefea1b659418
$ cd ~/nuttx/tools/ci
$ ./cibuild.sh -c -A -N -R testlist/arm64-01.dat
Configuration/Tool: qemu-armv8a/citest_smp
.../arch/os/integration/test_arch_os_integration.py::test_os[main] PASSED
.../arch/example/test_arch_example_integration.py::test_hello_integration[main] PASSED
.../arch/example/test_arch_example_integration.py::test_getprime PASSED
.../arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat001[main] FAILED
.../arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat002[main] FAILED
.../arch/nsh/test_arch_nsh_integration.py::TestCat::test_cat003[main] FAILEDUpdate: cibuild.sh on Master Branch is strangely inconsistent. Is QEMU or NTFC preserving some state? Hmmm https://gist.github.com/lupyuen/f11430c9d6ebfdf6e9d9c7b4d14fd2e2 $ git clone https://github.com/apache/nuttx
$ git clone https://github.com/apache/nuttx-apps apps
$ cd ~/nuttx/tools/ci
$ ./cibuild.sh -c -A -N -R testlist/arm64-01.dat
Build Attempt 1 of 4
Configuration/Tool: qemu-armv8a/citest_smp
../nuttx-ntfc/external/nuttx-testing/arch/os/integration/test_arch_os_integration.py::test_os[main] FAILED
...
Build Attempt 2 of 4
Configuration/Tool: qemu-armv8a/citest_smp
[ No Failures ] |
|
@linguini1 You might wanna check these Build Errors: (1) https://github.com/lupyuen260526/nuttx/actions/runs/26436834321/job/77821696938#step:10:898 (2) https://github.com/lupyuen260526/nuttx/actions/runs/26436834321/job/77821696977#step:10:1704 |
|
@linguini1 I ran docker CI for this PR on my host and all tests pass... I have no idea where the problem could be. Next thing I would try is to export nuttx elf which is built on github CI, I would download CI artifacts with it and see if it works locally on the host. |
|
Will take a look today, thank you @linguini1 :-) Looking at the @xiaoxiang781216 comment, maybe it is possible to add parameter to existing functions to tell which port we want to use to be least invasive? If current approach is blocking, on the other hand, it may need an update. Will take a look into details in few hours, sorry for the delay :-) |
Maybe we could create SBOM for the CI Docker image so we know what are exact dependencies? :-) |
|
@lupyuen thanks for the testing help! I did not try running with the cibuild script, I only targeted the failing I will try raiden's suggestion of building in CI with Make instead of CMake so I can download the artifact. Hopefully that reveals something! |
Summary
This commit refactors the PL011 UART driver so that it can be re-used for any number of UART interfaces depending on the board/chip. This commit also hooks the UART interface configuration/selection for PL011 UART interfaces into the same Kconfig used for regular UART interfaces. Now UART interfaces are configured in a standard, extensible way.
Related to #18836. Needed to unblock progress on the RPi4B PL011 UART interfaces for GSoC 2026.
Impact
Impacts only the 4 (simulator) boards that used PL011 UART.
Testing
For each of the QEMU boards, I tested their
gdbstubdemos since those configurations use both UART interfaces, not just a console.QEMU ARMv8A
Details
QEMU ARMv7A
Details
For the FVP boards, I tested compilation only.
The CXD32 and and Goldfish chips don't have any defconfigs to test.